package DTO;

/**
 * Esta classe tem por função manter a lista de meteoros do jogo.
 *
 * @author (your name)
 * @version (a version number or a date)
 */
public class ListaMeteoros
{
    // Variáveis de Instancia ------------------------------------------ *
    private MeteoroDTO _cabecaLista;
    private int _quantidadeMeteoros;

    // Contrutores ------------------------------------------------------- *
    /**
     * Construtor da classe ListaMeteoros
     */
    public ListaMeteoros()
    {
        _cabecaLista = null;
    }

    // Método ------------------------------------------------------- *
    /**
     * Retorna a quantidade de meteoros
     *
     * @return  int
     */
    public int getQuantidadeMeteoros()
    {
        return _quantidadeMeteoros;
    }


    /**
     * Insere um novo meteoro na lista de meteoros
     *
     * @param  _MeteoroDTO : MeteoroDTO
     */
    public void setMeteoro(MeteoroDTO meteoroDTO)
    {
        meteoroDTO.setProx(_cabecaLista);
        _cabecaLista = meteoroDTO;

        _quantidadeMeteoros++;
    }

   /**
     * Remove um Meteoro da lista. O meteoro será identificado pela sua chave.
     *
     * @param  _chave : int
     */
    public void remover(int chave)
    {
        MeteoroDTO ponteiroMeteoro = _cabecaLista;


        if(ponteiroMeteoro.getChave() == chave)
        {
            _cabecaLista = ponteiroMeteoro.getProx();
        }

        else
        {
            while (chave != ponteiroMeteoro.getProx().getChave())
            {
                ponteiroMeteoro = ponteiroMeteoro.getProx();
            }

            ponteiroMeteoro.setProx(ponteiroMeteoro.getProx().getProx());
        }

        _quantidadeMeteoros--;
    }

    /**
     * Retorna um Meteoro específico da lista de meteoros. O Meteoro será
     * identificado pela sua chave.
     *
     * @param  _chave : int
     * @return  MeteoroDTO
     */
    public MeteoroDTO retornaMeteoro(int chave)
    {
        MeteoroDTO ponteiroMeteoro = _cabecaLista;

        while (chave != ponteiroMeteoro.getChave())
        {
           ponteiroMeteoro = ponteiroMeteoro.getProx();
        }

        return ponteiroMeteoro;
    }

    /**
     * Retorna lista (vetor) de chaves dos meteoros.
     *
     * @return  int[]
     */
    public int[] retornaChaveMeteoros()
    {
        int[] listaChaves = new int[ _quantidadeMeteoros ];

        MeteoroDTO ponteiroMeteoro = _cabecaLista;

        for(int i =0; i  < _quantidadeMeteoros; i++)
        {
             listaChaves[ i ] = ponteiroMeteoro.getChave();

            ponteiroMeteoro = ponteiroMeteoro.getProx();
        }

        return listaChaves;
    }

    /**
     * Retorna lista (vetor) de chaves dos meteoros.
     *
     * @return  int[]
     */
    public boolean informaMeteoroExiste( int chave)
    {
        MeteoroDTO ponteiroMeteoro = _cabecaLista;

        for(int i =0; i  < _quantidadeMeteoros; i++)
        {
             if (chave == ponteiroMeteoro.getChave() )
                    return true;

              ponteiroMeteoro = ponteiroMeteoro.getProx();
        }

        return false;
    }
}